Skip to main content

libobs_simple\sources\linux\sources\pipewire/
restore_updater.rs

1use libobs_wrapper::{
2    data::{object::ObsObjectTrait, ObsData, ObsDataUpdater, ObsObjectUpdater},
3    runtime::ObsRuntime,
4    utils::{ObsError, ObsString},
5};
6
7use crate::sources::linux::pipewire::ObsPipeWireSourceRef;
8
9pub struct ObsPipeWireGeneralUpdater<'a> {
10    settings: ObsData,
11    settings_updater: ObsDataUpdater,
12    updatable: &'a mut ObsPipeWireSourceRef,
13}
14
15impl<'a> ObsObjectUpdater<'a, *mut libobs::obs_source> for ObsPipeWireGeneralUpdater<'a> {
16    type ToUpdate = ObsPipeWireSourceRef;
17
18    fn get_id() -> libobs_wrapper::utils::ObsString {
19        ObsString::new("pipewire-restore-token-updater")
20    }
21
22    fn create_update(
23        runtime: ObsRuntime,
24        updatable: &'a mut Self::ToUpdate,
25    ) -> Result<Self, ObsError> {
26        let mut settings = ObsData::new(runtime)?;
27
28        Ok(Self {
29            settings_updater: settings.bulk_update(),
30            settings,
31            updatable,
32        })
33    }
34
35    fn get_settings(&self) -> &ObsData {
36        &self.settings
37    }
38
39    fn get_settings_updater(&mut self) -> &mut ObsDataUpdater {
40        &mut self.settings_updater
41    }
42
43    fn update(self) -> Result<(), ObsError> {
44        let ObsPipeWireGeneralUpdater {
45            settings_updater,
46            updatable,
47            settings,
48        } = self;
49
50        settings_updater.apply()?;
51
52        updatable.update_settings(settings)
53    }
54
55    fn runtime(&self) -> &ObsRuntime {
56        self.updatable.runtime()
57    }
58}
59
60impl<'a> ObsPipeWireGeneralUpdater<'a> {
61    pub fn set_show_cursor(mut self, show: bool) -> Self {
62        self.settings_updater.set_bool_ref("ShowCursor", show);
63        self
64    }
65
66    /// Enable cursor capture for screen recording
67    pub fn with_cursor(self) -> Self {
68        self.set_show_cursor(true)
69    }
70}